{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Defining urban census tracts\n",
    "This script identifies tracts that are urbanized and within a core-based statistical area (as of 2020). It uses data including Census TIGER/Line boundaries for census tracts, urban areas, and core-based statistical areas, as well locale classifications from the National Center for Educational Statistics."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "id": "ARKaDzI5oT-9"
   },
   "outputs": [],
   "source": [
    "import geopandas\n",
    "import ipumspy\n",
    "import requests\n",
    "import zipfile\n",
    "import io\n",
    "import os\n",
    "import numpy\n",
    "from ipumspy import IpumsApiClient, NhgisDataset, NhgisDatasetMetadata"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Identifying urban tracts on 2020 boundaries\n",
    "This script draws on four boundary line data sources. \n",
    "- National Historic GIS 2020 census tract boundaries\n",
    "- Census TIGER/Line files for 2020 Core-Based Statistical Areas (CBSAs)\n",
    "- Census TIGER/Line files for 2020 Urban Areas \n",
    "- National Center for Education Statistics 2020 Locale Classifications"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Tract boundaries\n",
    "Start by pulling census tract boundaries from National Historical GIS. This requires a custom workflow based on the IPUMS API. To replicate, [create an NGHIS account](https://uma.pop.umn.edu/nhgis/user/new) and [register for an IPUMS API key](https://developer.ipums.org/docs/v2/get-started/). After querying the API and unpacking the nested file structure that it uses, load the boundaries as a geographic data frame with `geopandas`. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "# set IPUMS API key\n",
    "ipums = IpumsApiClient(\"your key here\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Submitted request 0281\n"
     ]
    }
   ],
   "source": [
    "# define the extract\n",
    "extract = ipumspy.AggregateDataExtract(collection=\"nhgis\",shapefiles=[\"us_tract_2020_tl2020\"]) \n",
    "\n",
    "# submit API request\n",
    "response = ipums.submit_extract(extract)\n",
    "print(f\"Submitted request 0{extract.extract_id}\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Downloaded request 0281\n"
     ]
    }
   ],
   "source": [
    "# download the extract\n",
    "ipums.download_extract(response)\n",
    "print(f\"Downloaded request 0{extract.extract_id}\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "nhgis0281_shape.zip extracted to nhgis0281_shape\n"
     ]
    }
   ],
   "source": [
    "# first level of unzipping\n",
    "outer_zip = f\"nhgis0{extract.extract_id}_shape.zip\"\n",
    "outer_dir = outer_zip.replace(\".zip\", \"\")\n",
    "with zipfile.ZipFile(outer_zip, \"r\") as z:\n",
    "    z.extractall(outer_dir)\n",
    "print(f\"{outer_zip} extracted to {outer_dir}\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'geopandas.geodataframe.GeoDataFrame'>\n",
      "RangeIndex: 85060 entries, 0 to 85059\n",
      "Data columns (total 16 columns):\n",
      " #   Column      Non-Null Count  Dtype   \n",
      "---  ------      --------------  -----   \n",
      " 0   GISJOIN     85060 non-null  object  \n",
      " 1   STATEFP     85060 non-null  object  \n",
      " 2   COUNTYFP    85060 non-null  object  \n",
      " 3   TRACTCE     85060 non-null  object  \n",
      " 4   GEOID       85060 non-null  object  \n",
      " 5   NAME        85060 non-null  object  \n",
      " 6   NAMELSAD    85060 non-null  object  \n",
      " 7   MTFCC       85060 non-null  object  \n",
      " 8   FUNCSTAT    85060 non-null  object  \n",
      " 9   ALAND       85060 non-null  float64 \n",
      " 10  AWATER      85060 non-null  float64 \n",
      " 11  INTPTLAT    85060 non-null  object  \n",
      " 12  INTPTLON    85060 non-null  object  \n",
      " 13  Shape_Leng  85060 non-null  float64 \n",
      " 14  Shape_Area  85060 non-null  float64 \n",
      " 15  geometry    85060 non-null  geometry\n",
      "dtypes: float64(4), geometry(1), object(11)\n",
      "memory usage: 10.4+ MB\n"
     ]
    }
   ],
   "source": [
    "# load the spatial data\n",
    "inner_zip = f\"{outer_dir}/{outer_dir}/nhgis0{extract.extract_id}_shapefile_tl2020_us_tract_2020.zip\"\n",
    "tracts = geopandas.read_file(f\"zip://{inner_zip}!/US_tract_2020.shp\")\n",
    "tracts = tracts.to_crs(\"ESRI:102003\")\n",
    "tracts.info()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Other geographies\n",
    "The other spatial data layers are publicaly available via URLs. These can be downloaded directly, and then loaded as geographic data frames using `geopandas`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<Axes: >"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# load core-based statistical areas\n",
    "## download the data\n",
    "url = \"https://www2.census.gov/geo/tiger/TIGER2020/CBSA/tl_2020_us_cbsa.zip\"\n",
    "response = requests.get(url)\n",
    "with zipfile.ZipFile(io.BytesIO(response.content)) as zip:\n",
    "    zip.extractall(\"cbsa_boundaries\")\n",
    "\n",
    "# read into a spatial data frame\n",
    "cbsas = geopandas.read_file(\"cbsa_boundaries/tl_2020_us_cbsa.shp\")\n",
    "cbsas = cbsas.to_crs(\"ESRI:102003\")\n",
    "cbsas.plot()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "id": "QsaL0oLHsUnb"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<Axes: >"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAioAAAE6CAYAAAA4Dnm1AAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAVfxJREFUeJzt3XmcZFV9N/7P3Wuv3reZnp4FZh9gGBAGQUCRxWiURAUlgDwkj4liUGMMJP6E8dGAP8HHJ4kQRQLhCQI/DBA10YBhkbDPwMjAwOzDrD291153Pb8/blV1V3d1T3dPV0/NzOf9ehWvmVu36p4609T99jnf8z2SEEKAiIiIqAbJR7sBRERERONhoEJEREQ1i4EKERER1SwGKkRERFSzGKgQERFRzWKgQkRERDWLgQoRERHVLAYqREREVLMYqBAREVHNYqBCRERENeuYCVR++9vf4mMf+xg6OjogSRKeeOKJKb+HEAJ33HEHFi9eDMMw0NnZib/927+d+cYSERHRjFCPdgMmK5PJ4NRTT8V1112HP/zDP5zWe9x444148skncccdd2DVqlVIJBLo6+ub4ZYSERHRTJGOxU0JJUnC448/jk984hOlY5Zl4Rvf+AYefPBBDA0NYeXKlfjud7+LCy64AADwzjvv4JRTTsFbb72FJUuWHJ2GExER0ZQcM1M/h3PdddfhhRdewMMPP4w333wTn/rUp3DppZdi27ZtAIBf/OIXWLhwIX75y19iwYIFmD9/Pv74j/8YAwMDR7nlRERENJ7jIlDZsWMHHnroITz66KM477zzsGjRInzta1/Dueeei/vuuw8AsHPnTrz33nt49NFH8cADD+D+++/Hhg0b8MlPfvIot56IiIjGc8zkqEzk9ddfhxACixcvLjtumiYaGxsBAJ7nwTRNPPDAA6Xz7r33XqxZswZbtmzhdBAREVENOi4CFc/zoCgKNmzYAEVRyp6LRCIAgPb2dqiqWhbMLFu2DACwZ88eBipEREQ16LgIVFavXg3XddHT04Pzzjuv4jnvf//74TgOduzYgUWLFgEAtm7dCgDo6uqatbYSERHR5B0zq37S6TS2b98OwA9Mvv/97+PCCy9EQ0MD5s2bhz/6oz/CCy+8gDvvvBOrV69GX18fnn76aaxatQof+chH4HkezjzzTEQiEfzgBz+A53n44he/iFgshieffPIofzoiIiKq5JgJVJ599llceOGFY45fe+21uP/++2HbNr797W/jgQcewP79+9HY2Ii1a9di3bp1WLVqFQDgwIED+NKXvoQnn3wS4XAYl112Ge688040NDTM9schIiKiSThmAhUiIiI68RwXy5OJiIjo+MRAhYiIiGpWTa/68TwPBw4cQDQahSRJR7s5RERENAlCCKRSKXR0dECWj2xMpKYDlQMHDqCzs/NoN4OIiIimYe/evZg7d+4RvUdNByrRaBSA/0FjsdhRbg0RERFNRjKZRGdnZ+k+fiRqOlApTvfEYjEGKkRERMeYmUjbYDItERER1ayqBiq33norJEkqe7S1tVXzkkRERHQcqfrUz4oVK/Cb3/ym9PfRmwYSERERjafqgYqqqhxFISIiommpeo7Ktm3b0NHRgQULFuDKK6/Ezp07q31JIiIiOk5UdUTlrLPOwgMPPIDFixfj0KFD+Pa3v41zzjkHb7/9NhobG8ecb5omTNMs/T2ZTFazeURERFTjZnVTwkwmg0WLFuHrX/86vvrVr455/tZbb8W6devGHE8kElyeTEREdIxIJpOIx+Mzcv+e1eXJ4XAYq1atwrZt2yo+f/PNNyORSJQee/furVpbHMep2nsTERHRzJjVQMU0Tbzzzjtob2+v+LxhGKXibtUu8iZJMrYcGKza+xMREdGRq2qg8rWvfQ3PPfccdu3ahVdeeQWf/OQnkUwmce2111bzspOiKDKWdNRXfC6Tt+G63iy3iIiIiEarajLtvn378JnPfAZ9fX1obm7G2WefjZdffhldXV3VvOwRCwe0o90EIiIiQpUDlYcffriab09ERETHOe71Q0RERDWLgQoRERHVLAYqREREVLMYqBAREVHNYqBCRERENYuBChEREdUsBipERERUsxioEBERUc1ioEJEREQ1i4EKERER1SwGKkRERFSzGKgQERFRzWKgQkRERDWLgQoRERHVLAYqREREVLMYqBAREVHNYqBCRERENYuBChEREdUsBipERERUsxioEBERUc1ioEJEREQ1i4EKERER1axZC1Ruu+02SJKEL3/5y7N1SSIiIjrGzUqg8tprr+HHP/4xTjnllNm4HBERER0nqh6opNNpXHXVVbjnnntQX19f7csRERHRcaTqgcoXv/hF/N7v/R4uuuiiw55rmiaSyWTZg4iIiE5cajXf/OGHH8brr7+O1157bVLn33bbbVi3bl01m0RERETHkKqNqOzduxc33ngj/uVf/gWBQGBSr7n55puRSCRKj71791areURERHQMkIQQohpv/MQTT+Dyyy+HoiilY67rQpIkyLIM0zTLnqskmUwiHo8jkUggFotVo5lEREQ0w2by/l21qZ8PfehD2LRpU9mx6667DkuXLsVf/dVfHTZIISIiIqpaoBKNRrFy5cqyY+FwGI2NjWOOE9HxK5UzEQ0aR7sZRHSMYmVaIqoqBilEdCSquupntGeffXY2L0dERETHOI6oEBERUc1ioEJEREQ1i4EKER13HMeDadlHuxlENAMYqBDR8UcCdvRwCw6i4wEDFSI67qiKjMXt9ahSPUsimkWzuuqHiGi2qAp/DyM6HvD/ZCIiIqpZDFSIiIioZjFQISIioprFQIWIjjlCCDiud7SbQUSzgIEKEdW8vOWU/vz6nkEcGEhjX3/6KLaIiGYLV/0QUc2zbRsB3f+6WtoaQcjQjnKLiGi2cESFiGpeNBws/ZlBCtGJhYEKERER1SwGKkRERFSzGKgQERFRzWKgQkRERDWLgQoR1QTWRSGiShioEFFN4CaCRFQJvxmIiIioZjFQISIioppV1UDl7rvvximnnIJYLIZYLIa1a9fiV7/6VTUvSURERMeRqgYqc+fOxe23347169dj/fr1+OAHP4iPf/zjePvtt6t5WSIiIjpOSEIIMZsXbGhowPe+9z1cf/31hz03mUwiHo8jkUggFovNQuuIiIjoSM3k/XvWNiV0XRePPvooMpkM1q5dO1uXJSIiomNY1QOVTZs2Ye3atcjn84hEInj88cexfPnyiueapgnTNEt/TyaT1W4eERER1bCqr/pZsmQJNm7ciJdffhl/9md/hmuvvRabN2+ueO5tt92GeDxeenR2dla7eURERFTDZj1H5aKLLsKiRYvwox/9aMxzlUZUOjs7maNCRER0DDkmc1SKhBBlwchIhmHAMIxZbhERERHVqqoGKn/913+Nyy67DJ2dnUilUnj44Yfx7LPP4te//nU1L0tERETHiaoGKocOHcLVV1+NgwcPIh6P45RTTsGvf/1rfPjDH67mZYmIiOg4UdVA5d57763m2xMREdFxjnv9EBERUc1ioEJEVJDMmJjlhZBEdBizvuqHiKhWxcJcdUhUaziiQkRERDWLgQoRndAsxzva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tY4KERER0VQwaYSIiIhqFgMVIiIiqlkMVIiIiKhmMVAhIiKimsVA5TC+853v4JxzzkEoFJp08TkhBG699VZ0dHQgGAziggsuwNtvv13dhlbR4OAgrr76asTjccTjcVx99dUYGhqa8DXpdBo33HAD5s6di2AwiGXLluHuu++enQZXwXT6AADeeecd/P7v/z7i8Tii0SjOPvts7Nmzp/oNrpLp9kPR5z//eUiShB/84AdVa2O1TbUPbNvGX/3VX2HVqlUIh8Po6OjANddcgwMHDsxeo4/QXXfdhQULFiAQCGDNmjV4/vnnJzz/ueeew5o1axAIBLBw4UL84z/+4yy1tLqm0g+PPfYYPvzhD6O5uRmxWAxr167Ff/7nf85ia6tjqj8LRS+88AJUVcVpp5029YsecRH+49w3v/lN8f3vf1989atfFfF4fFKvuf3220U0GhX/+q//KjZt2iSuuOIK0d7eLpLJZHUbWyWXXnqpWLlypXjxxRfFiy++KFauXCk++tGPTviaP/7jPxaLFi0SzzzzjNi1a5f40Y9+JBRFEU888cQstXpmTacPtm/fLhoaGsRf/uVfitdff13s2LFD/PKXvxSHDh2apVbPvOn0Q9Hjjz8uTj31VNHR0SH+9//+39VtaBVNtQ+GhobERRddJB555BHx7rvvipdeekmcddZZYs2aNbPY6ul7+OGHhaZp4p577hGbN28WN954owiHw+K9996reP7OnTtFKBQSN954o9i8ebO45557hKZp4mc/+9kst3xmTbUfbrzxRvHd735XvPrqq2Lr1q3i5ptvFpqmiddff32WWz5zptoHRUNDQ2LhwoXi4osvFqeeeuqUr8tAZZLuu+++SQUqnueJtrY2cfvtt5eO5fN5EY/HxT/+4z9WsYXVsXnzZgFAvPzyy6VjL730kgAg3n333XFft2LFCvGtb32r7Njpp58uvvGNb1StrdUy3T644oorxB/90R/NRhNnxXT7QQgh9u3bJ+bMmSPeeust0dXVdcwGKkfSByO9+uqrAsBhv+Brwfve9z7xp3/6p2XHli5dKm666aaK53/9618XS5cuLTv2+c9/Xpx99tlVa+NsmGo/VLJ8+XKxbt26mW7arJluH1xxxRXiG9/4hrjlllumFahw6meG7dq1C93d3bj44otLxwzDwPnnn48XX3zxKLZsel566SXE43Gc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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# load urban areas\n",
    "## download the data\n",
    "url = \"https://www2.census.gov/geo/tiger/TIGER2020/UAC/tl_2020_us_uac20.zip\"\n",
    "response = requests.get(url)\n",
    "with zipfile.ZipFile(io.BytesIO(response.content)) as zip:\n",
    "    zip.extractall(\"urbanarea_boundaries\")\n",
    "\n",
    "# read into a spatial data frame\n",
    "urban_areas = geopandas.read_file(\"urbanarea_boundaries/tl_2020_us_uac20.shp\")\n",
    "urban_areas = urban_areas.to_crs(\"ESRI:102003\")\n",
    "urban_areas.plot()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'geopandas.geodataframe.GeoDataFrame'>\n",
      "RangeIndex: 564 entries, 0 to 563\n",
      "Data columns (total 4 columns):\n",
      " #   Column    Non-Null Count  Dtype   \n",
      "---  ------    --------------  -----   \n",
      " 0   LOCALE    564 non-null    object  \n",
      " 1   STATEFP   564 non-null    object  \n",
      " 2   GEO_YEAR  564 non-null    object  \n",
      " 3   geometry  564 non-null    geometry\n",
      "dtypes: geometry(1), object(3)\n",
      "memory usage: 17.8+ KB\n"
     ]
    }
   ],
   "source": [
    "# load locale data -- Warning: It's a big file. This will take some time. \n",
    "## download the data\n",
    "url = \"https://nces.ed.gov/programs/edge/data/edge_locale20_nces_all_us.zip\"\n",
    "response = requests.get(url)\n",
    "with zipfile.ZipFile(io.BytesIO(response.content)) as zip:\n",
    "    zip.extractall(\"locale_boundaries\")\n",
    "\n",
    "# read into a spatial data frame\n",
    "locales = geopandas.read_file(\"locale_boundaries/edge_locale20_nces_all_us.shp\")\n",
    "locales = locales.to_crs(\"ESRI:102003\")\n",
    "locales.info()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Geoprocessing\n",
    "The workflow then identifies urban census tracts within CBSAs. After that, it curates a relevant list of geographic identifiers for the tracts using spatial joins. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'geopandas.geodataframe.GeoDataFrame'>\n",
      "Index: 84121 entries, 0 to 84120\n",
      "Data columns (total 6 columns):\n",
      " #   Column    Non-Null Count  Dtype   \n",
      "---  ------    --------------  -----   \n",
      " 0   GISJOIN   84121 non-null  object  \n",
      " 1   GEOID     84121 non-null  object  \n",
      " 2   STATEFP   84121 non-null  object  \n",
      " 3   COUNTYFP  84121 non-null  object  \n",
      " 4   TRACTCE   84121 non-null  object  \n",
      " 5   geometry  84121 non-null  geometry\n",
      "dtypes: geometry(1), object(5)\n",
      "memory usage: 4.5+ MB\n"
     ]
    }
   ],
   "source": [
    "# create centroids for each tract\n",
    "## create centroid\n",
    "tract_centroids = tracts.copy()\n",
    "tract_centroids[\"geometry\"] = tracts.centroid\n",
    "\n",
    "## select tract variables\n",
    "variables = [\"GISJOIN\", \"GEOID\", \"STATEFP\", \"COUNTYFP\", \"TRACTCE\"]\n",
    "tract_centroids = tract_centroids[variables + [\"geometry\"]]\n",
    "\n",
    "## drop tracts in Puerto Rico\n",
    "tract_centroids = tract_centroids[~tract_centroids[\"GEOID\"].str.startswith(\"72\")]\n",
    "\n",
    "tract_centroids.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'geopandas.geodataframe.GeoDataFrame'>\n",
      "Index: 78136 entries, 71059 to 1527\n",
      "Data columns (total 6 columns):\n",
      " #   Column    Non-Null Count  Dtype   \n",
      "---  ------    --------------  -----   \n",
      " 0   GISJOIN   78136 non-null  object  \n",
      " 1   GEOID     78136 non-null  object  \n",
      " 2   STATEFP   78136 non-null  object  \n",
      " 3   COUNTYFP  78136 non-null  object  \n",
      " 4   TRACTCE   78136 non-null  object  \n",
      " 5   geometry  78136 non-null  geometry\n",
      "dtypes: geometry(1), object(5)\n",
      "memory usage: 4.2+ MB\n"
     ]
    }
   ],
   "source": [
    "# find centroids within CBSAs\n",
    "tract_centroids = geopandas.clip(tract_centroids, cbsas)\n",
    "tract_centroids.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'geopandas.geodataframe.GeoDataFrame'>\n",
      "Index: 56886 entries, 71044 to 1520\n",
      "Data columns (total 6 columns):\n",
      " #   Column    Non-Null Count  Dtype   \n",
      "---  ------    --------------  -----   \n",
      " 0   GISJOIN   56886 non-null  object  \n",
      " 1   GEOID     56886 non-null  object  \n",
      " 2   STATEFP   56886 non-null  object  \n",
      " 3   COUNTYFP  56886 non-null  object  \n",
      " 4   TRACTCE   56886 non-null  object  \n",
      " 5   geometry  56886 non-null  geometry\n",
      "dtypes: geometry(1), object(5)\n",
      "memory usage: 3.0+ MB\n"
     ]
    }
   ],
   "source": [
    "# and within urban areas\n",
    "tract_centroids = geopandas.clip(tract_centroids, urban_areas)\n",
    "tract_centroids.info()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Now do some spatial joining to gather geography variables for each tract. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'geopandas.geodataframe.GeoDataFrame'>\n",
      "Index: 56886 entries, 71044 to 1520\n",
      "Data columns (total 9 columns):\n",
      " #   Column         Non-Null Count  Dtype   \n",
      "---  ------         --------------  -----   \n",
      " 0   GISJOIN        56886 non-null  object  \n",
      " 1   GEOID          56886 non-null  object  \n",
      " 2   STATEFP        56886 non-null  object  \n",
      " 3   COUNTYFP       56886 non-null  object  \n",
      " 4   TRACTCE        56886 non-null  object  \n",
      " 5   geometry       56886 non-null  geometry\n",
      " 6   CBSAFP         56886 non-null  object  \n",
      " 7   CBSA_NAME      56886 non-null  object  \n",
      " 8   CBSA_NAMELSAD  56886 non-null  object  \n",
      "dtypes: geometry(1), object(8)\n",
      "memory usage: 4.3+ MB\n"
     ]
    }
   ],
   "source": [
    "# add CBSA indicators to the tracts\n",
    "variables = [\"CBSAFP\", \"NAME\", \"NAMELSAD\"]\n",
    "cbsas = cbsas[variables + [\"geometry\"]]\n",
    "cbsas = cbsas.rename(columns = {\n",
    "    \"CBSAFP\": \"CBSAFP\",\n",
    "    \"NAME\": \"CBSA_NAME\",\n",
    "    \"NAMELSAD\": \"CBSA_NAMELSAD\"\n",
    "})\n",
    "\n",
    "# spatial join tracts to CBSAs\n",
    "tract_centroids = geopandas.sjoin(\n",
    "    left_df = tract_centroids,\n",
    "    right_df = cbsas,\n",
    "    how = \"left\",\n",
    "    predicate = \"within\"\n",
    ").drop(columns=[\"index_right\"])\n",
    "\n",
    "tract_centroids.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'geopandas.geodataframe.GeoDataFrame'>\n",
      "Index: 56886 entries, 71044 to 1520\n",
      "Data columns (total 12 columns):\n",
      " #   Column         Non-Null Count  Dtype   \n",
      "---  ------         --------------  -----   \n",
      " 0   GISJOIN        56886 non-null  object  \n",
      " 1   GEOID          56886 non-null  object  \n",
      " 2   STATEFP        56886 non-null  object  \n",
      " 3   COUNTYFP       56886 non-null  object  \n",
      " 4   TRACTCE        56886 non-null  object  \n",
      " 5   geometry       56886 non-null  geometry\n",
      " 6   CBSAFP         56886 non-null  object  \n",
      " 7   CBSA_NAME      56886 non-null  object  \n",
      " 8   CBSA_NAMELSAD  56886 non-null  object  \n",
      " 9   UAFP           56886 non-null  object  \n",
      " 10  UA_NAME        56886 non-null  object  \n",
      " 11  UA_NAMELSAD    56886 non-null  object  \n",
      "dtypes: geometry(1), object(11)\n",
      "memory usage: 5.6+ MB\n"
     ]
    }
   ],
   "source": [
    "# add urban indicators to the tracts\n",
    "variables = [\"UACE20\", \"NAME20\", \"NAMELSAD20\"]\n",
    "urban_areas = urban_areas[variables + [\"geometry\"]]\n",
    "urban_areas = urban_areas.rename(columns = {\n",
    "    \"UACE20\": \"UAFP\",\n",
    "    \"NAME20\": \"UA_NAME\",\n",
    "    \"NAMELSAD20\": \"UA_NAMELSAD\"\n",
    "})\n",
    "\n",
    "# spatial join tracts to urban areas\n",
    "tract_centroids = geopandas.sjoin(\n",
    "    left_df = tract_centroids,\n",
    "    right_df = urban_areas,\n",
    "    how = \"left\",\n",
    "    predicate = \"within\"\n",
    ").drop(columns=[\"index_right\"])\n",
    "\n",
    "tract_centroids.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'geopandas.geodataframe.GeoDataFrame'>\n",
      "Index: 56886 entries, 71044 to 1520\n",
      "Data columns (total 13 columns):\n",
      " #   Column         Non-Null Count  Dtype   \n",
      "---  ------         --------------  -----   \n",
      " 0   GISJOIN        56886 non-null  object  \n",
      " 1   GEOID          56886 non-null  object  \n",
      " 2   STATEFP        56886 non-null  object  \n",
      " 3   COUNTYFP       56886 non-null  object  \n",
      " 4   TRACTCE        56886 non-null  object  \n",
      " 5   geometry       56886 non-null  geometry\n",
      " 6   CBSAFP         56886 non-null  object  \n",
      " 7   CBSA_NAME      56886 non-null  object  \n",
      " 8   CBSA_NAMELSAD  56886 non-null  object  \n",
      " 9   UAFP           56886 non-null  object  \n",
      " 10  UA_NAME        56886 non-null  object  \n",
      " 11  UA_NAMELSAD    56886 non-null  object  \n",
      " 12  LOCALE         56886 non-null  object  \n",
      "dtypes: geometry(1), object(12)\n",
      "memory usage: 6.1+ MB\n"
     ]
    }
   ],
   "source": [
    "# add locale type to the tracts\n",
    "variables = [\"LOCALE\"]\n",
    "locales = locales[variables + [\"geometry\"]]\n",
    "\n",
    "# spatial join tracts to urban areas\n",
    "tract_centroids = geopandas.sjoin_nearest(\n",
    "    left_df = tract_centroids,\n",
    "    right_df = locales,\n",
    "    how = \"left\"\n",
    ").drop(columns=[\"index_right\"])\n",
    "\n",
    "tract_centroids.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "LocaleType\n",
      "City      26715\n",
      "Suburb    25670\n",
      "Rural      2257\n",
      "Exurb      2244\n",
      "Name: count, dtype: int64\n"
     ]
    }
   ],
   "source": [
    "# add a descriptive label for locale type\n",
    "# Define the conditions \n",
    "conditions = [\n",
    "    tract_centroids[\"LOCALE\"].isin([\"11\", \"12\", \"13\"]),\n",
    "    tract_centroids[\"LOCALE\"].isin([\"21\", \"22\", \"23\"]),\n",
    "    tract_centroids[\"LOCALE\"].isin([\"32\", \"33\", \"42\", \"43\"]),\n",
    "    tract_centroids[\"LOCALE\"].isin([\"31\", \"41\"])\n",
    "]\n",
    "\n",
    "# list the corresponding outputs\n",
    "choices = [\"City\", \"Suburb\", \"Exurb\", \"Rural\"]\n",
    "\n",
    "# create the new column\n",
    "tract_centroids[\"LocaleType\"] = numpy.select(conditions, choices, default=None)\n",
    "\n",
    "print(tract_centroids[\"LocaleType\"].value_counts())"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Finishing up\n",
    "Finally, we'll join the centroid layer back to the original tract polygons. After that, we'll save the boundaries to a `.gpkg` spatial database. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>GISJOIN</th>\n",
       "      <th>geometry</th>\n",
       "      <th>GEOID</th>\n",
       "      <th>STATEFP</th>\n",
       "      <th>COUNTYFP</th>\n",
       "      <th>TRACTCE</th>\n",
       "      <th>CBSAFP</th>\n",
       "      <th>CBSA_NAME</th>\n",
       "      <th>CBSA_NAMELSAD</th>\n",
       "      <th>UAFP</th>\n",
       "      <th>UA_NAME</th>\n",
       "      <th>UA_NAMELSAD</th>\n",
       "      <th>LOCALE</th>\n",
       "      <th>LocaleType</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>G4800610013309</td>\n",
       "      <td>POLYGON ((-145468.127 -1291533.031, -145776.84...</td>\n",
       "      <td>48061013309</td>\n",
       "      <td>48</td>\n",
       "      <td>61</td>\n",
       "      <td>13309</td>\n",
       "      <td>15180</td>\n",
       "      <td>Brownsville-Harlingen, TX</td>\n",
       "      <td>Brownsville-Harlingen, TX Metro Area</td>\n",
       "      <td>10972</td>\n",
       "      <td>Brownsville, TX</td>\n",
       "      <td>Brownsville, TX Urban Area</td>\n",
       "      <td>12</td>\n",
       "      <td>City</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>G4800610014101</td>\n",
       "      <td>POLYGON ((-142316.607 -1287116.638, -142323.95...</td>\n",
       "      <td>48061014101</td>\n",
       "      <td>48</td>\n",
       "      <td>61</td>\n",
       "      <td>14101</td>\n",
       "      <td>15180</td>\n",
       "      <td>Brownsville-Harlingen, TX</td>\n",
       "      <td>Brownsville-Harlingen, TX Metro Area</td>\n",
       "      <td>10972</td>\n",
       "      <td>Brownsville, TX</td>\n",
       "      <td>Brownsville, TX Urban Area</td>\n",
       "      <td>22</td>\n",
       "      <td>Suburb</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>G4800610013308</td>\n",
       "      <td>POLYGON ((-145460.673 -1289950.62, -145554.6 -...</td>\n",
       "      <td>48061013308</td>\n",
       "      <td>48</td>\n",
       "      <td>61</td>\n",
       "      <td>13308</td>\n",
       "      <td>15180</td>\n",
       "      <td>Brownsville-Harlingen, TX</td>\n",
       "      <td>Brownsville-Harlingen, TX Metro Area</td>\n",
       "      <td>10972</td>\n",
       "      <td>Brownsville, TX</td>\n",
       "      <td>Brownsville, TX Urban Area</td>\n",
       "      <td>12</td>\n",
       "      <td>City</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>G4800610013306</td>\n",
       "      <td>POLYGON ((-147328.153 -1288605.435, -147287.21...</td>\n",
       "      <td>48061013306</td>\n",
       "      <td>48</td>\n",
       "      <td>61</td>\n",
       "      <td>13306</td>\n",
       "      <td>15180</td>\n",
       "      <td>Brownsville-Harlingen, TX</td>\n",
       "      <td>Brownsville-Harlingen, TX Metro Area</td>\n",
       "      <td>10972</td>\n",
       "      <td>Brownsville, TX</td>\n",
       "      <td>Brownsville, TX Urban Area</td>\n",
       "      <td>12</td>\n",
       "      <td>City</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>G4800610013305</td>\n",
       "      <td>POLYGON ((-144908.448 -1289054.725, -144909.62...</td>\n",
       "      <td>48061013305</td>\n",
       "      <td>48</td>\n",
       "      <td>61</td>\n",
       "      <td>13305</td>\n",
       "      <td>15180</td>\n",
       "      <td>Brownsville-Harlingen, TX</td>\n",
       "      <td>Brownsville-Harlingen, TX Metro Area</td>\n",
       "      <td>10972</td>\n",
       "      <td>Brownsville, TX</td>\n",
       "      <td>Brownsville, TX Urban Area</td>\n",
       "      <td>12</td>\n",
       "      <td>City</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>56881</th>\n",
       "      <td>G0200900000500</td>\n",
       "      <td>POLYGON ((-2798986.752 3699840.075, -2798936.8...</td>\n",
       "      <td>2090000500</td>\n",
       "      <td>2</td>\n",
       "      <td>90</td>\n",
       "      <td>500</td>\n",
       "      <td>21820</td>\n",
       "      <td>Fairbanks, AK</td>\n",
       "      <td>Fairbanks, AK Metro Area</td>\n",
       "      <td>28549</td>\n",
       "      <td>Fairbanks, AK</td>\n",
       "      <td>Fairbanks, AK Urban Area</td>\n",
       "      <td>13</td>\n",
       "      <td>City</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>56882</th>\n",
       "      <td>G0200900000700</td>\n",
       "      <td>POLYGON ((-2803102.221 3700245.631, -2803094.6...</td>\n",
       "      <td>2090000700</td>\n",
       "      <td>2</td>\n",
       "      <td>90</td>\n",
       "      <td>700</td>\n",
       "      <td>21820</td>\n",
       "      <td>Fairbanks, AK</td>\n",
       "      <td>Fairbanks, AK Metro Area</td>\n",
       "      <td>28549</td>\n",
       "      <td>Fairbanks, AK</td>\n",
       "      <td>Fairbanks, AK Urban Area</td>\n",
       "      <td>13</td>\n",
       "      <td>City</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>56883</th>\n",
       "      <td>G0200900000600</td>\n",
       "      <td>POLYGON ((-2798986.752 3699840.075, -2798993.1...</td>\n",
       "      <td>2090000600</td>\n",
       "      <td>2</td>\n",
       "      <td>90</td>\n",
       "      <td>600</td>\n",
       "      <td>21820</td>\n",
       "      <td>Fairbanks, AK</td>\n",
       "      <td>Fairbanks, AK Metro Area</td>\n",
       "      <td>28549</td>\n",
       "      <td>Fairbanks, AK</td>\n",
       "      <td>Fairbanks, AK Urban Area</td>\n",
       "      <td>13</td>\n",
       "      <td>City</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>56884</th>\n",
       "      <td>G0200900000800</td>\n",
       "      <td>POLYGON ((-2805468.428 3702366.715, -2805456.2...</td>\n",
       "      <td>2090000800</td>\n",
       "      <td>2</td>\n",
       "      <td>90</td>\n",
       "      <td>800</td>\n",
       "      <td>21820</td>\n",
       "      <td>Fairbanks, AK</td>\n",
       "      <td>Fairbanks, AK Metro Area</td>\n",
       "      <td>28549</td>\n",
       "      <td>Fairbanks, AK</td>\n",
       "      <td>Fairbanks, AK Urban Area</td>\n",
       "      <td>23</td>\n",
       "      <td>Suburb</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>56885</th>\n",
       "      <td>G0200900001300</td>\n",
       "      <td>POLYGON ((-2790951.438 3703433.578, -2790919.4...</td>\n",
       "      <td>2090001300</td>\n",
       "      <td>2</td>\n",
       "      <td>90</td>\n",
       "      <td>1300</td>\n",
       "      <td>21820</td>\n",
       "      <td>Fairbanks, AK</td>\n",
       "      <td>Fairbanks, AK Metro Area</td>\n",
       "      <td>28549</td>\n",
       "      <td>Fairbanks, AK</td>\n",
       "      <td>Fairbanks, AK Urban Area</td>\n",
       "      <td>41</td>\n",
       "      <td>Rural</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>56886 rows × 14 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "              GISJOIN                                           geometry  \\\n",
       "0      G4800610013309  POLYGON ((-145468.127 -1291533.031, -145776.84...   \n",
       "1      G4800610014101  POLYGON ((-142316.607 -1287116.638, -142323.95...   \n",
       "2      G4800610013308  POLYGON ((-145460.673 -1289950.62, -145554.6 -...   \n",
       "3      G4800610013306  POLYGON ((-147328.153 -1288605.435, -147287.21...   \n",
       "4      G4800610013305  POLYGON ((-144908.448 -1289054.725, -144909.62...   \n",
       "...               ...                                                ...   \n",
       "56881  G0200900000500  POLYGON ((-2798986.752 3699840.075, -2798936.8...   \n",
       "56882  G0200900000700  POLYGON ((-2803102.221 3700245.631, -2803094.6...   \n",
       "56883  G0200900000600  POLYGON ((-2798986.752 3699840.075, -2798993.1...   \n",
       "56884  G0200900000800  POLYGON ((-2805468.428 3702366.715, -2805456.2...   \n",
       "56885  G0200900001300  POLYGON ((-2790951.438 3703433.578, -2790919.4...   \n",
       "\n",
       "             GEOID  STATEFP  COUNTYFP  TRACTCE  CBSAFP  \\\n",
       "0      48061013309       48        61    13309   15180   \n",
       "1      48061014101       48        61    14101   15180   \n",
       "2      48061013308       48        61    13308   15180   \n",
       "3      48061013306       48        61    13306   15180   \n",
       "4      48061013305       48        61    13305   15180   \n",
       "...            ...      ...       ...      ...     ...   \n",
       "56881   2090000500        2        90      500   21820   \n",
       "56882   2090000700        2        90      700   21820   \n",
       "56883   2090000600        2        90      600   21820   \n",
       "56884   2090000800        2        90      800   21820   \n",
       "56885   2090001300        2        90     1300   21820   \n",
       "\n",
       "                       CBSA_NAME                         CBSA_NAMELSAD   UAFP  \\\n",
       "0      Brownsville-Harlingen, TX  Brownsville-Harlingen, TX Metro Area  10972   \n",
       "1      Brownsville-Harlingen, TX  Brownsville-Harlingen, TX Metro Area  10972   \n",
       "2      Brownsville-Harlingen, TX  Brownsville-Harlingen, TX Metro Area  10972   \n",
       "3      Brownsville-Harlingen, TX  Brownsville-Harlingen, TX Metro Area  10972   \n",
       "4      Brownsville-Harlingen, TX  Brownsville-Harlingen, TX Metro Area  10972   \n",
       "...                          ...                                   ...    ...   \n",
       "56881              Fairbanks, AK              Fairbanks, AK Metro Area  28549   \n",
       "56882              Fairbanks, AK              Fairbanks, AK Metro Area  28549   \n",
       "56883              Fairbanks, AK              Fairbanks, AK Metro Area  28549   \n",
       "56884              Fairbanks, AK              Fairbanks, AK Metro Area  28549   \n",
       "56885              Fairbanks, AK              Fairbanks, AK Metro Area  28549   \n",
       "\n",
       "               UA_NAME                 UA_NAMELSAD  LOCALE LocaleType  \n",
       "0      Brownsville, TX  Brownsville, TX Urban Area      12       City  \n",
       "1      Brownsville, TX  Brownsville, TX Urban Area      22     Suburb  \n",
       "2      Brownsville, TX  Brownsville, TX Urban Area      12       City  \n",
       "3      Brownsville, TX  Brownsville, TX Urban Area      12       City  \n",
       "4      Brownsville, TX  Brownsville, TX Urban Area      12       City  \n",
       "...                ...                         ...     ...        ...  \n",
       "56881    Fairbanks, AK    Fairbanks, AK Urban Area      13       City  \n",
       "56882    Fairbanks, AK    Fairbanks, AK Urban Area      13       City  \n",
       "56883    Fairbanks, AK    Fairbanks, AK Urban Area      13       City  \n",
       "56884    Fairbanks, AK    Fairbanks, AK Urban Area      23     Suburb  \n",
       "56885    Fairbanks, AK    Fairbanks, AK Urban Area      41      Rural  \n",
       "\n",
       "[56886 rows x 14 columns]"
      ]
     },
     "execution_count": 41,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# drop duplicate columns\n",
    "variables = ['GISJOIN', 'geometry']\n",
    "polygons = tracts[variables]\n",
    "points = tract_centroids.drop('geometry', axis=1)\n",
    "\n",
    "# merge centroid data back to polygons\n",
    "tracts_final = polygons.merge(points, on='GISJOIN', how='right')\n",
    "tracts_final"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Saved to geopackage\n"
     ]
    }
   ],
   "source": [
    "# save to geopackage\n",
    "tracts_final.to_file(\n",
    "    filename = \"tract_boundaries.gpkg\",\n",
    "    layer = \"metrotracts_2020tr\",\n",
    "    driver = \"GPKG\"\n",
    ")\n",
    "print(\"Saved to geopackage\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Saved csv version\n"
     ]
    }
   ],
   "source": [
    "# save a CSV version\n",
    "tract_centroids.to_csv('metrotracts_2020tr.csv', index=False)\n",
    "print(\"Saved csv version\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# and save CSV with WKT geometries\n",
    "tracts_final.to_csv('boundaries_metrotracts_2020tr.csv', index=False)\n",
    "print(\"Saved WKT geometries\")"
   ]
  }
 ],
 "metadata": {
  "colab": {
   "provenance": []
  },
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.13.10"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
